﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using biz.ritter.javapi.lang.reflect;
using Nofs.Net.Common.Interfaces.Library;

namespace Nofs.Net.Common.Interfaces.Domain
{
    public enum FileObjectType
    {
        FOLDER = 1,
        FILE = 2,
        LINK = 3,
    }

    public interface IFileObject : IDomainObject
    {
        String GetParentPath();
        String GetName(); // throws Exception;
        void SetName(String value); // throws Exception;
        bool CanSetName(); // throws Exception;

        GenerationType GetGenerationType();

        IFileObjectStat GetStat(); // throws Exception;

        Object GetObject();

        bool CanWrite(); // throws Exception;

        bool CanMknod(); // throws Exception;

        bool CanMkdir(); // throws Exception;

        bool CanRmdir(); // throws Exception;

        bool CanDeleteChildren(); // throws Exception;

        Method GetMethod();

        bool HasMethod();

        Object GetValue(); // throws IllegalArgumentException, IllegalAccessException, InvocationTargetException;

        bool IsChildTypeCompatible(IFileObject possibleChild); // throws Exception;

        bool SupportsDirectIO(); // throws Exception;

        IProvidesUnstructuredData GetReadWriteInterface(); // throws Exception;
    }

}
